package com.wn.demo02;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.reflect.MethodSignature;

import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author yellow Docter
 * @date 2022 -07-07
 * @desc
       解析方法的 注解的通知
       01 拿到方法
       02 拿到注解
       03 进行日志记录
 */
public class LogAdvice {

    /**
     * 环绕通知
     * @param proceedingJoinPoint
     * @return
     */
    public Object around(ProceedingJoinPoint proceedingJoinPoint){

        //签名  方法的名称
        MethodSignature signature = (MethodSignature) proceedingJoinPoint.getSignature();
        Method method = signature.getMethod();
        System.out.println("method.getName() = " + method.getName());

        System.out.println("method.isAnnotationPresent(MyLog.class) = " + method.isAnnotationPresent(MyLog.class));
        if (method.isAnnotationPresent(MyLog.class)) {

            MyLog annotation = method.getAnnotation(MyLog.class);
            String value = annotation.value();
            System.out.println("张三:" + getTime() + "," + value);

            //把这个存储到db中
        }
        Object proceed = null;
        try {
            // 如果目标方法没有参数  proceed();
//            proceed = proceedingJoinPoint.proceed();
            // 如果有参数就是调用 proceed(args)
            proceed = proceedingJoinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }

        return proceed;
    }

    /**
     * 时间格式化
     * @return
     */
    private String getTime() {
        return  new SimpleDateFormat("yyyy:MM:dd:HH:mm:ss").format(new Date());
    }
}
